// 测试 Array对象的 原型属性 (即在 Array.prototype 上定义的属性)

const names = ['敖广','敖钦','敖广','敖闰','敖广','敖顺','敖广' ];

const key = '敖广' ;

// Array.prototype.indexOf( key [ , from ] ) 
// 从数组的 from 开始正向查找 key 首次出现的位置，若存在则返回其索引，否则返回 -1
console.log( names.indexOf( key ) ); // 第二个参数 form 的默认值是 0
console.log( names.indexOf( key , 1 ) );

// Array.prototype.lastIndexOf( key [ , from ] )
// 从数组的 from 开始反向查找 key 首次出现的位置，若存在就返回其索引，否则返回 -1
console.log( names.lastIndexOf( key ) ); // 第二个参数 from 的默认值是 names.length - 1
console.log( names.lastIndexOf( key , names.length - 2 ) );

// Array.prototype.includes( key [ , from ] )
// 从数组中 from 开始正向查找 key ，若存在则返回 true ，否则返回 false
console.log( names.includes( key ) ); // 第二个参数 form 的默认值是 0
console.log( names.includes( key , 6 ) );

const goods = [
    { id: 2123 , name: '小米MIX 4' , price: 4999 },
    { id: 3112 , name: '中兴Axon 30' , price: 2299 },
    { id: 4321 , name: '红魔7Pro' , price: 6999 },
    { id: 5432 , name: '中兴Axon 40' , price: 9999 },
];

let check = (element,index,array) => {
    console.log( index , element );
    return element.name.includes('中兴');
}

// Array.prototype.findIndex( check(element, index, array) [ , thisArg ] )
// 在数组中正向查找首个能够通过 check 函数测试的元素，若找到则返回该元素的索引，否则返回 -1
let index = goods.findIndex( check ); 
// 在 findIndex 内部遍历数组，并针对每个元素调用 check 函数，
// 若某个元素能够通过 check 函数检查，则终止遍历返回当前元素的索引
console.log( index );

console.log( '- '.repeat( 20 ) );

// Array.prototype.find( check(element, index, array) [ , thisArg ] )
// 在数组中正向查找首个能够通过 check 函数测试的元素，若找到则返回该元素，否则返回 undefined
let product = goods.find( check );
console.log( product );